import java.util.HashMap;
import java.util.Map;
/**
 * Created by L.jp
 * Description:给定一个字符串，找到它的第一个不重复的字符，并返回它的索引。如果不存在，则返回 -1。
 * User: 86189
 * Date: 2021-10-29
 * Time: 14:32
 */
public class FirstCharacter {
    public static int firstUniqChar(String s) {
        //第一种解法，用数组存储每个字母出现的次数
        /*
        int[]arr=new int[26];//存放每个字母出现的个数
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            arr[ch - 97]++;//遍历原数组，如果出现了几次就会加几次
        }
        for(int i=0;i<s.length();i++){
            char ch=s.charAt(i);
            if(arr[ch-97]==1){
                return i;//如果出现的次数为1，那么就找到了，返回下标
            }
        }
        return -1;
         */

        //第二种解法，利用哈希表hashMap存储字符与出现次数的映射关系
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            map.put(ch, map.getOrDefault(ch, 0) + 1);//把字符和他的出现次数放入map,如果有ch这个字符，那么就得到ch对应的value值+1，没有就是0次
        }
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            if (map.get(ch) == 1) {
                return i;
            }
        }
        return -1;


    }

    public static void main(String[] args) {
        String s = "shfikdnsdfsfifk";
        System.out.println(firstUniqChar(s));
    }
}